﻿using System;
using System.Collections.Generic;

namespace CRM.Database.Model
{
    public partial class Settlements : IGetLocalizedName, ISetChangedUser, IGetKeyValue, IGetNamesValues
    {
        #region Implementation of IGetLocalizedName

        /// <summary>
        /// Получение имени на текущем языке
        /// </summary>
        /// <param name="currentLanguage">Язык</param>
        /// <returns>Имя на заданном языке</returns>
        public string GetLocalizedName(CurrentLanguage currentLanguage)
        {
            switch (currentLanguage)
            {
                case CurrentLanguage.Russian:
                    return NameRu;

                case CurrentLanguage.English:
                    return NameEn;

                default:
                    throw new ArgumentOutOfRangeException("currentLanguage");
            }
        }

        /// <summary>
        /// Получение имени на текущем языке
        /// </summary>
        /// <returns>Локализованное имя</returns>
        public string GetLocalizedName()
        {
            CurrentLanguage lang = DB.CurrentLanguage;
            return GetLocalizedName(lang);
        }

        #endregion

        #region Implementation of ISetChangedUser

        /// <summary>
        /// Установка пользователя, который сделал изменение
        /// </summary>
        /// <param name="userLogin">Логин пользователя</param>
        public void SetChangedUser(string userLogin)
        {
            if (string.IsNullOrEmpty(userLogin))
                throw new Exception("Логин пользователя не должен быть пустым!");
            IdUser = userLogin;
        }

        #endregion

        /// <summary>
        /// Название населённого пункта на текущем языке
        /// </summary>
        public string NameLocalized
        {
            get { return GetLocalizedName(); }
        }

        /// <summary>
        /// Название региона
        /// </summary>
        public string RegionName
        {
            get
            {
                if (Regions == null)
                    return "";
                return Regions.GetLocalizedName();
            }
        }


        /// <summary>
        /// Идентификатор 
        /// </summary>
        public int IdDistrict
        {
            get
            {
                if (Regions != null) if (Regions.IdDistrict != null) return (int) Regions.IdDistrict;
                return 0;
            }
        }

        /// <summary>
        /// Название области
        /// </summary>
        public string DistrictName
        {
            get
            {
                if (Regions != null)
                    if (Regions.Districts != null)
                        return Regions.Districts.GetLocalizedName();
                return "";
            }
        }

        /// <summary>
        /// Название района
        /// </summary>
        public string AreaName
        {
            get
            {
                if (Areas != null)
                    return Areas.GetLocalizedName();
                return "";
            }
        }


        /// <summary>
        /// Регион профайн
        /// </summary>
        public profineRegions profineRegion
        {
            get
            {
                if (Regions != null)
                    return Regions.profineRegions;
                return null;
            }
        }

        /// <summary>
        /// Страна
        /// </summary>
        public Countries Country
        {
            get
            {
                if (Regions != null) if (Regions.Districts != null) return Regions.Districts.Countries;
                return null;
            }
        }


        /// <summary>
        /// Локализованное название страны
        /// </summary>
        public string CountryNameLocalized
        {
            get { return Country.CountryNameLocalized; }
        }


        /// <summary>
        /// Идентификатор страны
        /// </summary>
        public int IdCountry
        {
            get
            {
                if (Regions != null)
                    if (Regions.Districts != null)
                        if (Regions.Districts.Countries != null) return Regions.Districts.Countries.IdCountry;
                return 0;
            }
        }

        /// <summary>
        /// Получить регионы в стране
        /// </summary>
        /// <param name="idCountry">Идентификатор страны</param>
        /// <returns>Регионы</returns>
        public List<Districts> GetDistrictsByCountryId(int idCountry)
        {
            var Col = new DistrictsCollection();
            return Col.GetDistrictsByCountryId(idCountry);
        }

        #region Implementation of IGetKeyValue

        /// <summary>
        /// Получение ключего значения элемента
        /// </summary>
        /// <returns>Ключевое значение</returns>
        public int GetKeyValue()
        {
            return IdSettlement;
        }

        #endregion

        #region Implementation of IGetNamesValues

        /// <summary>
        /// Получение списка имён
        /// </summary>
        /// <returns>Список имён</returns>
        public List<string> GetNamesValues()
        {
            var result = new List<string>();
            result.Add(NameEn);
            result.Add(NameRu);
            return result;
        }

        #endregion
    }
}